1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.lang3.builder;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertNull;
21 import static org.junit.Assert.assertSame;
22 import static org.junit.Assume.assumeFalse;
23
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28
29 import org.apache.commons.lang3.SystemUtils;
30 import org.junit.After;
31 import org.junit.Test;
32
33
34
35
36
37
38 public class ToStringBuilderTest {
39
40 private final Integer base = Integer.valueOf(5);
41 private final String baseStr = base.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(base));
42
43
44
45
46 @After
47 public void after(){
48 validateNullToStringStyleRegistry();
49 }
50
51
52
53 @Test
54 public void testConstructorEx1() {
55 assertEquals("<null>", new ToStringBuilder(null).toString());
56 }
57
58 @Test
59 public void testConstructorEx2() {
60 assertEquals("<null>", new ToStringBuilder(null, null).toString());
61 new ToStringBuilder(this.base, null).toString();
62 }
63
64 @Test
65 public void testConstructorEx3() {
66 assertEquals("<null>", new ToStringBuilder(null, null, null).toString());
67 new ToStringBuilder(this.base, null, null).toString();
68 new ToStringBuilder(this.base, ToStringStyle.DEFAULT_STYLE, null).toString();
69 }
70
71 @Test
72 public void testGetSetDefault() {
73 try {
74 ToStringBuilder.setDefaultStyle(ToStringStyle.NO_FIELD_NAMES_STYLE);
75 assertSame(ToStringStyle.NO_FIELD_NAMES_STYLE, ToStringBuilder.getDefaultStyle());
76 } finally {
77
78 ToStringBuilder.setDefaultStyle(ToStringStyle.DEFAULT_STYLE);
79 }
80 }
81
82 @Test(expected=IllegalArgumentException.class)
83 public void testSetDefaultEx() {
84 ToStringBuilder.setDefaultStyle(null);
85 }
86
87 @Test
88 public void testBlank() {
89 assertEquals(baseStr + "[]", new ToStringBuilder(base).toString());
90 }
91
92
93
94
95 @Test
96 public void testReflectionInteger() {
97 assertEquals(baseStr + "[value=5]", ToStringBuilder.reflectionToString(base));
98 }
99
100
101
102
103 @Test
104 public void testReflectionCharacter() {
105 final Character c = new Character('A');
106 assertEquals(this.toBaseString(c) + "[value=A]", ToStringBuilder.reflectionToString(c));
107 }
108
109
110
111
112 @Test
113 public void testReflectionBoolean() {
114 Boolean b;
115 b = Boolean.TRUE;
116 assertEquals(this.toBaseString(b) + "[value=true]", ToStringBuilder.reflectionToString(b));
117 b = Boolean.FALSE;
118 assertEquals(this.toBaseString(b) + "[value=false]", ToStringBuilder.reflectionToString(b));
119 }
120
121
122
123
124
125
126 private String toBaseString(final Object o) {
127 return o.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(o));
128 }
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145 public void assertReflectionArray(final String expected, final Object actual) {
146 if (actual == null) {
147
148 return;
149 }
150 assertEquals(expected, ToStringBuilder.reflectionToString(actual));
151 assertEquals(expected, ToStringBuilder.reflectionToString(actual, null));
152 assertEquals(expected, ToStringBuilder.reflectionToString(actual, null, true));
153 assertEquals(expected, ToStringBuilder.reflectionToString(actual, null, false));
154 }
155
156 @Test
157 public void testReflectionObjectArray() {
158 Object[] array = new Object[] { null, base, new int[] { 3, 6 } };
159 final String baseString = this.toBaseString(array);
160 assertEquals(baseString + "[{<null>,5,{3,6}}]", ToStringBuilder.reflectionToString(array));
161 array = null;
162 assertReflectionArray("<null>", array);
163 }
164
165 @Test
166 public void testReflectionLongArray() {
167 long[] array = new long[] { 1, 2, -3, 4 };
168 final String baseString = this.toBaseString(array);
169 assertEquals(baseString + "[{1,2,-3,4}]", ToStringBuilder.reflectionToString(array));
170 array = null;
171 assertReflectionArray("<null>", array);
172 }
173
174 @Test
175 public void testReflectionIntArray() {
176 int[] array = new int[] { 1, 2, -3, 4 };
177 final String baseString = this.toBaseString(array);
178 assertEquals(baseString + "[{1,2,-3,4}]", ToStringBuilder.reflectionToString(array));
179 array = null;
180 assertReflectionArray("<null>", array);
181 }
182
183 @Test
184 public void testReflectionShortArray() {
185 short[] array = new short[] { 1, 2, -3, 4 };
186 final String baseString = this.toBaseString(array);
187 assertEquals(baseString + "[{1,2,-3,4}]", ToStringBuilder.reflectionToString(array));
188 array = null;
189 assertReflectionArray("<null>", array);
190 }
191
192 @Test
193 public void testReflectionyteArray() {
194 byte[] array = new byte[] { 1, 2, -3, 4 };
195 final String baseString = this.toBaseString(array);
196 assertEquals(baseString + "[{1,2,-3,4}]", ToStringBuilder.reflectionToString(array));
197 array = null;
198 assertReflectionArray("<null>", array);
199 }
200
201 @Test
202 public void testReflectionCharArray() {
203 char[] array = new char[] { 'A', '2', '_', 'D' };
204 final String baseString = this.toBaseString(array);
205 assertEquals(baseString + "[{A,2,_,D}]", ToStringBuilder.reflectionToString(array));
206 array = null;
207 assertReflectionArray("<null>", array);
208 }
209
210 @Test
211 public void testReflectionDoubleArray() {
212 double[] array = new double[] { 1.0, 2.9876, -3.00001, 4.3 };
213 final String baseString = this.toBaseString(array);
214 assertEquals(baseString + "[{1.0,2.9876,-3.00001,4.3}]", ToStringBuilder.reflectionToString(array));
215 array = null;
216 assertReflectionArray("<null>", array);
217 }
218
219 @Test
220 public void testReflectionFloatArray() {
221 float[] array = new float[] { 1.0f, 2.9876f, -3.00001f, 4.3f };
222 final String baseString = this.toBaseString(array);
223 assertEquals(baseString + "[{1.0,2.9876,-3.00001,4.3}]", ToStringBuilder.reflectionToString(array));
224 array = null;
225 assertReflectionArray("<null>", array);
226 }
227
228 @Test
229 public void testReflectionBooleanArray() {
230 boolean[] array = new boolean[] { true, false, false };
231 final String baseString = this.toBaseString(array);
232 assertEquals(baseString + "[{true,false,false}]", ToStringBuilder.reflectionToString(array));
233 array = null;
234 assertReflectionArray("<null>", array);
235 }
236
237
238
239 @Test
240 public void testReflectionFloatArrayArray() {
241 float[][] array = new float[][] { { 1.0f, 2.29686f }, null, { Float.NaN } };
242 final String baseString = this.toBaseString(array);
243 assertEquals(baseString + "[{{1.0,2.29686},<null>,{NaN}}]", ToStringBuilder.reflectionToString(array));
244 array = null;
245 assertReflectionArray("<null>", array);
246 }
247
248
249 @Test
250 public void testReflectionLongArrayArray() {
251 long[][] array = new long[][] { { 1, 2 }, null, { 5 } };
252 final String baseString = this.toBaseString(array);
253 assertEquals(baseString + "[{{1,2},<null>,{5}}]", ToStringBuilder.reflectionToString(array));
254 array = null;
255 assertReflectionArray("<null>", array);
256 }
257
258 @Test
259 public void testReflectionIntArrayArray() {
260 int[][] array = new int[][] { { 1, 2 }, null, { 5 } };
261 final String baseString = this.toBaseString(array);
262 assertEquals(baseString + "[{{1,2},<null>,{5}}]", ToStringBuilder.reflectionToString(array));
263 array = null;
264 assertReflectionArray("<null>", array);
265 }
266
267 @Test
268 public void testReflectionhortArrayArray() {
269 short[][] array = new short[][] { { 1, 2 }, null, { 5 } };
270 final String baseString = this.toBaseString(array);
271 assertEquals(baseString + "[{{1,2},<null>,{5}}]", ToStringBuilder.reflectionToString(array));
272 array = null;
273 assertReflectionArray("<null>", array);
274 }
275
276 @Test
277 public void testReflectionByteArrayArray() {
278 byte[][] array = new byte[][] { { 1, 2 }, null, { 5 } };
279 final String baseString = this.toBaseString(array);
280 assertEquals(baseString + "[{{1,2},<null>,{5}}]", ToStringBuilder.reflectionToString(array));
281 array = null;
282 assertReflectionArray("<null>", array);
283 }
284
285 @Test
286 public void testReflectionCharArrayArray() {
287 char[][] array = new char[][] { { 'A', 'B' }, null, { 'p' } };
288 final String baseString = this.toBaseString(array);
289 assertEquals(baseString + "[{{A,B},<null>,{p}}]", ToStringBuilder.reflectionToString(array));
290 array = null;
291 assertReflectionArray("<null>", array);
292 }
293
294 @Test
295 public void testReflectionDoubleArrayArray() {
296 double[][] array = new double[][] { { 1.0, 2.29686 }, null, { Double.NaN } };
297 final String baseString = this.toBaseString(array);
298 assertEquals(baseString + "[{{1.0,2.29686},<null>,{NaN}}]", ToStringBuilder.reflectionToString(array));
299 array = null;
300 assertReflectionArray("<null>", array);
301 }
302
303 @Test
304 public void testReflectionBooleanArrayArray() {
305 boolean[][] array = new boolean[][] { { true, false }, null, { false } };
306 final String baseString = this.toBaseString(array);
307 assertEquals(baseString + "[{{true,false},<null>,{false}}]", ToStringBuilder.reflectionToString(array));
308 assertEquals(baseString + "[{{true,false},<null>,{false}}]", ToStringBuilder.reflectionToString(array));
309 array = null;
310 assertReflectionArray("<null>", array);
311 }
312
313
314 @Test
315 public void testReflectionHierarchyArrayList() {
316
317
318 assumeFalse("IBM Corporation".equals(SystemUtils.JAVA_VENDOR) && "1.6".equals(SystemUtils.JAVA_SPECIFICATION_VERSION));
319 assumeFalse("Oracle Corporation".equals(SystemUtils.JAVA_VENDOR) && "1.6".compareTo(SystemUtils.JAVA_SPECIFICATION_VERSION) < 0);
320 final List<Object> list = new ArrayList<Object>();
321 final String baseString = this.toBaseString(list);
322 final String expectedWithTransients = baseString + "[elementData={<null>,<null>,<null>,<null>,<null>,<null>,<null>,<null>,<null>,<null>},size=0,modCount=0]";
323 final String toStringWithTransients = ToStringBuilder.reflectionToString(list, null, true);
324 if (!expectedWithTransients.equals(toStringWithTransients)) {
325 assertEquals(expectedWithTransients, toStringWithTransients);
326 }
327 final String expectedWithoutTransients = baseString + "[size=0]";
328 final String toStringWithoutTransients = ToStringBuilder.reflectionToString(list, null, false);
329 if (!expectedWithoutTransients.equals(toStringWithoutTransients)) {
330 assertEquals(expectedWithoutTransients, toStringWithoutTransients);
331 }
332 }
333
334 @Test
335 public void testReflectionHierarchy() {
336 final ReflectionTestFixtureA baseA = new ReflectionTestFixtureA();
337 String baseString = this.toBaseString(baseA);
338 assertEquals(baseString + "[a=a]", ToStringBuilder.reflectionToString(baseA));
339 assertEquals(baseString + "[a=a]", ToStringBuilder.reflectionToString(baseA, null));
340 assertEquals(baseString + "[a=a]", ToStringBuilder.reflectionToString(baseA, null, false));
341 assertEquals(baseString + "[a=a,transientA=t]", ToStringBuilder.reflectionToString(baseA, null, true));
342 assertEquals(baseString + "[a=a]", ToStringBuilder.reflectionToString(baseA, null, false, null));
343 assertEquals(baseString + "[a=a]", ToStringBuilder.reflectionToString(baseA, null, false, Object.class));
344 assertEquals(baseString + "[a=a]", ToStringBuilder.reflectionToString(baseA, null, false, ReflectionTestFixtureA.class));
345
346 final ReflectionTestFixtureB baseB = new ReflectionTestFixtureB();
347 baseString = this.toBaseString(baseB);
348 assertEquals(baseString + "[b=b,a=a]", ToStringBuilder.reflectionToString(baseB));
349 assertEquals(baseString + "[b=b,a=a]", ToStringBuilder.reflectionToString(baseB));
350 assertEquals(baseString + "[b=b,a=a]", ToStringBuilder.reflectionToString(baseB, null));
351 assertEquals(baseString + "[b=b,a=a]", ToStringBuilder.reflectionToString(baseB, null, false));
352 assertEquals(baseString + "[b=b,transientB=t,a=a,transientA=t]", ToStringBuilder.reflectionToString(baseB, null, true));
353 assertEquals(baseString + "[b=b,a=a]", ToStringBuilder.reflectionToString(baseB, null, false, null));
354 assertEquals(baseString + "[b=b,a=a]", ToStringBuilder.reflectionToString(baseB, null, false, Object.class));
355 assertEquals(baseString + "[b=b,a=a]", ToStringBuilder.reflectionToString(baseB, null, false, ReflectionTestFixtureA.class));
356 assertEquals(baseString + "[b=b]", ToStringBuilder.reflectionToString(baseB, null, false, ReflectionTestFixtureB.class));
357 }
358
359 static class ReflectionTestFixtureA {
360 @SuppressWarnings("unused")
361 private final char a='a';
362 @SuppressWarnings("unused")
363 private transient char transientA='t';
364 }
365
366 static class ReflectionTestFixtureB extends ReflectionTestFixtureA {
367 @SuppressWarnings("unused")
368 private final char b='b';
369 @SuppressWarnings("unused")
370 private transient char transientB='t';
371 }
372
373 @Test
374 public void testInnerClassReflection() {
375 final Outer outer = new Outer();
376 assertEquals(toBaseString(outer) + "[inner=" + toBaseString(outer.inner) + "[]]", outer.toString());
377 }
378
379 static class Outer {
380 Inner inner = new Inner();
381 class Inner {
382 @Override
383 public String toString() {
384 return ToStringBuilder.reflectionToString(this);
385 }
386 }
387 @Override
388 public String toString() {
389 return ToStringBuilder.reflectionToString(this);
390 }
391 }
392
393
394
395
396
397
398 @Test
399 public void testReflectionArrayCycle() {
400 final Object[] objects = new Object[1];
401 objects[0] = objects;
402 assertEquals(
403 this.toBaseString(objects) + "[{" + this.toBaseString(objects) + "}]",
404 ToStringBuilder.reflectionToString(objects));
405 }
406
407
408
409
410 @Test
411 public void testReflectionArrayCycleLevel2() {
412 final Object[] objects = new Object[1];
413 final Object[] objectsLevel2 = new Object[1];
414 objects[0] = objectsLevel2;
415 objectsLevel2[0] = objects;
416 assertEquals(
417 this.toBaseString(objects) + "[{{" + this.toBaseString(objects) + "}}]",
418 ToStringBuilder.reflectionToString(objects));
419 assertEquals(
420 this.toBaseString(objectsLevel2) + "[{{" + this.toBaseString(objectsLevel2) + "}}]",
421 ToStringBuilder.reflectionToString(objectsLevel2));
422 }
423
424 @Test
425 public void testReflectionArrayArrayCycle() throws Exception {
426 final Object[][] objects = new Object[2][2];
427 objects[0][0] = objects;
428 objects[0][1] = objects;
429 objects[1][0] = objects;
430 objects[1][1] = objects;
431 final String basicToString = this.toBaseString(objects);
432 assertEquals(
433 basicToString
434 + "[{{"
435 + basicToString
436 + ","
437 + basicToString
438 + "},{"
439 + basicToString
440 + ","
441 + basicToString
442 + "}}]",
443 ToStringBuilder.reflectionToString(objects));
444 }
445
446
447
448
449 static class ReflectionTestCycleA {
450 ReflectionTestCycleB b;
451
452 @Override
453 public String toString() {
454 return ToStringBuilder.reflectionToString(this);
455 }
456 }
457
458
459
460
461 static class ReflectionTestCycleB {
462 ReflectionTestCycleA a;
463
464 @Override
465 public String toString() {
466 return ToStringBuilder.reflectionToString(this);
467 }
468 }
469
470
471
472
473 static class SimpleReflectionTestFixture {
474 Object o;
475
476 public SimpleReflectionTestFixture() {
477 }
478
479 public SimpleReflectionTestFixture(final Object o) {
480 this.o = o;
481 }
482
483 @Override
484 public String toString() {
485 return ToStringBuilder.reflectionToString(this);
486 }
487 }
488
489 private static class SelfInstanceVarReflectionTestFixture {
490 @SuppressWarnings("unused")
491 private final SelfInstanceVarReflectionTestFixture typeIsSelf;
492
493 public SelfInstanceVarReflectionTestFixture() {
494 this.typeIsSelf = this;
495 }
496
497 @Override
498 public String toString() {
499 return ToStringBuilder.reflectionToString(this);
500 }
501 }
502
503 private static class SelfInstanceTwoVarsReflectionTestFixture {
504 @SuppressWarnings("unused")
505 private final SelfInstanceTwoVarsReflectionTestFixture typeIsSelf;
506 private final String otherType = "The Other Type";
507
508 public SelfInstanceTwoVarsReflectionTestFixture() {
509 this.typeIsSelf = this;
510 }
511
512 public String getOtherType(){
513 return this.otherType;
514 }
515
516 @Override
517 public String toString() {
518 return ToStringBuilder.reflectionToString(this);
519 }
520 }
521
522
523
524
525
526 @Test
527 public void testSimpleReflectionObjectCycle() {
528 final SimpleReflectionTestFixture simple = new SimpleReflectionTestFixture();
529 simple.o = simple;
530 assertEquals(this.toBaseString(simple) + "[o=" + this.toBaseString(simple) + "]", simple.toString());
531 }
532
533
534
535
536 @Test
537 public void testSelfInstanceVarReflectionObjectCycle() {
538 final SelfInstanceVarReflectionTestFixture test = new SelfInstanceVarReflectionTestFixture();
539 assertEquals(this.toBaseString(test) + "[typeIsSelf=" + this.toBaseString(test) + "]", test.toString());
540 }
541
542
543
544
545
546 @Test
547 public void testSelfInstanceTwoVarsReflectionObjectCycle() {
548 final SelfInstanceTwoVarsReflectionTestFixture test = new SelfInstanceTwoVarsReflectionTestFixture();
549 assertEquals(this.toBaseString(test) + "[typeIsSelf=" + this.toBaseString(test) + ",otherType=" + test.getOtherType().toString() + "]", test.toString());
550 }
551
552
553
554
555
556 @Test
557 public void testReflectionObjectCycle() {
558 final ReflectionTestCycleA a = new ReflectionTestCycleA();
559 final ReflectionTestCycleB b = new ReflectionTestCycleB();
560 a.b = b;
561 b.a = a;
562 assertEquals(
563 this.toBaseString(a) + "[b=" + this.toBaseString(b) + "[a=" + this.toBaseString(a) + "]]",
564 a.toString());
565 }
566
567
568
569
570
571 @Test
572 public void testReflectionArrayAndObjectCycle() {
573 final Object[] objects = new Object[1];
574 final SimpleReflectionTestFixture simple = new SimpleReflectionTestFixture(objects);
575 objects[0] = simple;
576 assertEquals(
577 this.toBaseString(objects)
578 + "[{"
579 + this.toBaseString(simple)
580 + "[o="
581 + this.toBaseString(objects)
582 + "]"
583 + "}]",
584 ToStringBuilder.reflectionToString(objects));
585 assertEquals(
586 this.toBaseString(simple)
587 + "[o={"
588 + this.toBaseString(simple)
589 + "}]",
590 ToStringBuilder.reflectionToString(simple));
591 }
592
593 void validateNullToStringStyleRegistry() {
594 final Map<Object, Object> registry = ToStringStyle.getRegistry();
595 assertNull("Expected null, actual: "+registry, registry);
596 }
597
598
599 @Test
600 public void testAppendSuper() {
601 assertEquals(baseStr + "[]", new ToStringBuilder(base).appendSuper("Integer@8888[]").toString());
602 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).appendSuper("Integer@8888[<null>]").toString());
603
604 assertEquals(baseStr + "[a=hello]", new ToStringBuilder(base).appendSuper("Integer@8888[]").append("a", "hello").toString());
605 assertEquals(baseStr + "[<null>,a=hello]", new ToStringBuilder(base).appendSuper("Integer@8888[<null>]").append("a", "hello").toString());
606 assertEquals(baseStr + "[a=hello]", new ToStringBuilder(base).appendSuper(null).append("a", "hello").toString());
607 }
608
609 @Test
610 public void testAppendToString() {
611 assertEquals(baseStr + "[]", new ToStringBuilder(base).appendToString("Integer@8888[]").toString());
612 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).appendToString("Integer@8888[<null>]").toString());
613
614 assertEquals(baseStr + "[a=hello]", new ToStringBuilder(base).appendToString("Integer@8888[]").append("a", "hello").toString());
615 assertEquals(baseStr + "[<null>,a=hello]", new ToStringBuilder(base).appendToString("Integer@8888[<null>]").append("a", "hello").toString());
616 assertEquals(baseStr + "[a=hello]", new ToStringBuilder(base).appendToString(null).append("a", "hello").toString());
617 }
618
619 @Test
620 public void testObject() {
621 final Integer i3 = Integer.valueOf(3);
622 final Integer i4 = Integer.valueOf(4);
623 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) null).toString());
624 assertEquals(baseStr + "[3]", new ToStringBuilder(base).append(i3).toString());
625 assertEquals(baseStr + "[a=<null>]", new ToStringBuilder(base).append("a", (Object) null).toString());
626 assertEquals(baseStr + "[a=3]", new ToStringBuilder(base).append("a", i3).toString());
627 assertEquals(baseStr + "[a=3,b=4]", new ToStringBuilder(base).append("a", i3).append("b", i4).toString());
628 assertEquals(baseStr + "[a=<Integer>]", new ToStringBuilder(base).append("a", i3, false).toString());
629 assertEquals(baseStr + "[a=<size=0>]", new ToStringBuilder(base).append("a", new ArrayList<Object>(), false).toString());
630 assertEquals(baseStr + "[a=[]]", new ToStringBuilder(base).append("a", new ArrayList<Object>(), true).toString());
631 assertEquals(baseStr + "[a=<size=0>]", new ToStringBuilder(base).append("a", new HashMap<Object, Object>(), false).toString());
632 assertEquals(baseStr + "[a={}]", new ToStringBuilder(base).append("a", new HashMap<Object, Object>(), true).toString());
633 assertEquals(baseStr + "[a=<size=0>]", new ToStringBuilder(base).append("a", (Object) new String[0], false).toString());
634 assertEquals(baseStr + "[a={}]", new ToStringBuilder(base).append("a", (Object) new String[0], true).toString());
635 }
636
637 @Test
638 public void testObjectBuild() {
639 final Integer i3 = Integer.valueOf(3);
640 final Integer i4 = Integer.valueOf(4);
641 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) null).build());
642 assertEquals(baseStr + "[3]", new ToStringBuilder(base).append(i3).build());
643 assertEquals(baseStr + "[a=<null>]", new ToStringBuilder(base).append("a", (Object) null).build());
644 assertEquals(baseStr + "[a=3]", new ToStringBuilder(base).append("a", i3).build());
645 assertEquals(baseStr + "[a=3,b=4]", new ToStringBuilder(base).append("a", i3).append("b", i4).build());
646 assertEquals(baseStr + "[a=<Integer>]", new ToStringBuilder(base).append("a", i3, false).build());
647 assertEquals(baseStr + "[a=<size=0>]", new ToStringBuilder(base).append("a", new ArrayList<Object>(), false).build());
648 assertEquals(baseStr + "[a=[]]", new ToStringBuilder(base).append("a", new ArrayList<Object>(), true).build());
649 assertEquals(baseStr + "[a=<size=0>]", new ToStringBuilder(base).append("a", new HashMap<Object, Object>(), false).build());
650 assertEquals(baseStr + "[a={}]", new ToStringBuilder(base).append("a", new HashMap<Object, Object>(), true).build());
651 assertEquals(baseStr + "[a=<size=0>]", new ToStringBuilder(base).append("a", (Object) new String[0], false).build());
652 assertEquals(baseStr + "[a={}]", new ToStringBuilder(base).append("a", (Object) new String[0], true).build());
653 }
654
655 @Test
656 public void testLong() {
657 assertEquals(baseStr + "[3]", new ToStringBuilder(base).append(3L).toString());
658 assertEquals(baseStr + "[a=3]", new ToStringBuilder(base).append("a", 3L).toString());
659 assertEquals(baseStr + "[a=3,b=4]", new ToStringBuilder(base).append("a", 3L).append("b", 4L).toString());
660 }
661
662 @SuppressWarnings("cast")
663 @Test
664 public void testInt() {
665 assertEquals(baseStr + "[3]", new ToStringBuilder(base).append((int) 3).toString());
666 assertEquals(baseStr + "[a=3]", new ToStringBuilder(base).append("a", (int) 3).toString());
667 assertEquals(baseStr + "[a=3,b=4]", new ToStringBuilder(base).append("a", (int) 3).append("b", (int) 4).toString());
668 }
669
670 @Test
671 public void testShort() {
672 assertEquals(baseStr + "[3]", new ToStringBuilder(base).append((short) 3).toString());
673 assertEquals(baseStr + "[a=3]", new ToStringBuilder(base).append("a", (short) 3).toString());
674 assertEquals(baseStr + "[a=3,b=4]", new ToStringBuilder(base).append("a", (short) 3).append("b", (short) 4).toString());
675 }
676
677 @Test
678 public void testChar() {
679 assertEquals(baseStr + "[A]", new ToStringBuilder(base).append((char) 65).toString());
680 assertEquals(baseStr + "[a=A]", new ToStringBuilder(base).append("a", (char) 65).toString());
681 assertEquals(baseStr + "[a=A,b=B]", new ToStringBuilder(base).append("a", (char) 65).append("b", (char) 66).toString());
682 }
683
684 @Test
685 public void testByte() {
686 assertEquals(baseStr + "[3]", new ToStringBuilder(base).append((byte) 3).toString());
687 assertEquals(baseStr + "[a=3]", new ToStringBuilder(base).append("a", (byte) 3).toString());
688 assertEquals(baseStr + "[a=3,b=4]", new ToStringBuilder(base).append("a", (byte) 3).append("b", (byte) 4).toString());
689 }
690
691 @SuppressWarnings("cast")
692 @Test
693 public void testDouble() {
694 assertEquals(baseStr + "[3.2]", new ToStringBuilder(base).append((double) 3.2).toString());
695 assertEquals(baseStr + "[a=3.2]", new ToStringBuilder(base).append("a", (double) 3.2).toString());
696 assertEquals(baseStr + "[a=3.2,b=4.3]", new ToStringBuilder(base).append("a", (double) 3.2).append("b", (double) 4.3).toString());
697 }
698
699 @Test
700 public void testFloat() {
701 assertEquals(baseStr + "[3.2]", new ToStringBuilder(base).append((float) 3.2).toString());
702 assertEquals(baseStr + "[a=3.2]", new ToStringBuilder(base).append("a", (float) 3.2).toString());
703 assertEquals(baseStr + "[a=3.2,b=4.3]", new ToStringBuilder(base).append("a", (float) 3.2).append("b", (float) 4.3).toString());
704 }
705
706 @Test
707 public void testBoolean() {
708 assertEquals(baseStr + "[true]", new ToStringBuilder(base).append(true).toString());
709 assertEquals(baseStr + "[a=true]", new ToStringBuilder(base).append("a", true).toString());
710 assertEquals(baseStr + "[a=true,b=false]", new ToStringBuilder(base).append("a", true).append("b", false).toString());
711 }
712
713
714 @Test
715 public void testObjectArray() {
716 Object[] array = new Object[] {null, base, new int[] {3, 6}};
717 assertEquals(baseStr + "[{<null>,5,{3,6}}]", new ToStringBuilder(base).append(array).toString());
718 assertEquals(baseStr + "[{<null>,5,{3,6}}]", new ToStringBuilder(base).append((Object) array).toString());
719 array = null;
720 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
721 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
722 }
723
724 @Test
725 public void testLongArray() {
726 long[] array = new long[] {1, 2, -3, 4};
727 assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append(array).toString());
728 assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append((Object) array).toString());
729 array = null;
730 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
731 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
732 }
733
734 @Test
735 public void testIntArray() {
736 int[] array = new int[] {1, 2, -3, 4};
737 assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append(array).toString());
738 assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append((Object) array).toString());
739 array = null;
740 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
741 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
742 }
743
744 @Test
745 public void testShortArray() {
746 short[] array = new short[] {1, 2, -3, 4};
747 assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append(array).toString());
748 assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append((Object) array).toString());
749 array = null;
750 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
751 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
752 }
753
754 @Test
755 public void testByteArray() {
756 byte[] array = new byte[] {1, 2, -3, 4};
757 assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append(array).toString());
758 assertEquals(baseStr + "[{1,2,-3,4}]", new ToStringBuilder(base).append((Object) array).toString());
759 array = null;
760 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
761 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
762 }
763
764 @Test
765 public void testCharArray() {
766 char[] array = new char[] {'A', '2', '_', 'D'};
767 assertEquals(baseStr + "[{A,2,_,D}]", new ToStringBuilder(base).append(array).toString());
768 assertEquals(baseStr + "[{A,2,_,D}]", new ToStringBuilder(base).append((Object) array).toString());
769 array = null;
770 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
771 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
772 }
773
774 @Test
775 public void testDoubleArray() {
776 double[] array = new double[] {1.0, 2.9876, -3.00001, 4.3};
777 assertEquals(baseStr + "[{1.0,2.9876,-3.00001,4.3}]", new ToStringBuilder(base).append(array).toString());
778 assertEquals(baseStr + "[{1.0,2.9876,-3.00001,4.3}]", new ToStringBuilder(base).append((Object) array).toString());
779 array = null;
780 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
781 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
782 }
783
784 @Test
785 public void testFloatArray() {
786 float[] array = new float[] {1.0f, 2.9876f, -3.00001f, 4.3f};
787 assertEquals(baseStr + "[{1.0,2.9876,-3.00001,4.3}]", new ToStringBuilder(base).append(array).toString());
788 assertEquals(baseStr + "[{1.0,2.9876,-3.00001,4.3}]", new ToStringBuilder(base).append((Object) array).toString());
789 array = null;
790 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
791 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
792 }
793
794 @Test
795 public void testBooleanArray() {
796 boolean[] array = new boolean[] {true, false, false};
797 assertEquals(baseStr + "[{true,false,false}]", new ToStringBuilder(base).append(array).toString());
798 assertEquals(baseStr + "[{true,false,false}]", new ToStringBuilder(base).append((Object) array).toString());
799 array = null;
800 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
801 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
802 }
803
804 @Test
805 public void testLongArrayArray() {
806 long[][] array = new long[][] {{1, 2}, null, {5}};
807 assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append(array).toString());
808 assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append((Object) array).toString());
809 array = null;
810 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
811 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
812 }
813
814 @Test
815 public void testIntArrayArray() {
816 int[][] array = new int[][] {{1, 2}, null, {5}};
817 assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append(array).toString());
818 assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append((Object) array).toString());
819 array = null;
820 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
821 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
822 }
823
824 @Test
825 public void testShortArrayArray() {
826 short[][] array = new short[][] {{1, 2}, null, {5}};
827 assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append(array).toString());
828 assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append((Object) array).toString());
829 array = null;
830 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
831 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
832 }
833
834 @Test
835 public void testByteArrayArray() {
836 byte[][] array = new byte[][] {{1, 2}, null, {5}};
837 assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append(array).toString());
838 assertEquals(baseStr + "[{{1,2},<null>,{5}}]", new ToStringBuilder(base).append((Object) array).toString());
839 array = null;
840 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
841 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
842 }
843
844 @Test
845 public void testCharArrayArray() {
846 char[][] array = new char[][] {{'A', 'B'}, null, {'p'}};
847 assertEquals(baseStr + "[{{A,B},<null>,{p}}]", new ToStringBuilder(base).append(array).toString());
848 assertEquals(baseStr + "[{{A,B},<null>,{p}}]", new ToStringBuilder(base).append((Object) array).toString());
849 array = null;
850 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
851 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
852 }
853
854 @Test
855 public void testDoubleArrayArray() {
856 double[][] array = new double[][] {{1.0, 2.29686}, null, {Double.NaN}};
857 assertEquals(baseStr + "[{{1.0,2.29686},<null>,{NaN}}]", new ToStringBuilder(base).append(array).toString());
858 assertEquals(baseStr + "[{{1.0,2.29686},<null>,{NaN}}]", new ToStringBuilder(base).append((Object) array).toString());
859 array = null;
860 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
861 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
862 }
863
864 @Test
865 public void testFloatArrayArray() {
866 float[][] array = new float[][] {{1.0f, 2.29686f}, null, {Float.NaN}};
867 assertEquals(baseStr + "[{{1.0,2.29686},<null>,{NaN}}]", new ToStringBuilder(base).append(array).toString());
868 assertEquals(baseStr + "[{{1.0,2.29686},<null>,{NaN}}]", new ToStringBuilder(base).append((Object) array).toString());
869 array = null;
870 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
871 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
872 }
873
874 @Test
875 public void testBooleanArrayArray() {
876 boolean[][] array = new boolean[][] {{true, false}, null, {false}};
877 assertEquals(baseStr + "[{{true,false},<null>,{false}}]", new ToStringBuilder(base).append(array).toString());
878 assertEquals(baseStr + "[{{true,false},<null>,{false}}]", new ToStringBuilder(base).append((Object) array).toString());
879 array = null;
880 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append(array).toString());
881 assertEquals(baseStr + "[<null>]", new ToStringBuilder(base).append((Object) array).toString());
882 }
883
884 @Test
885 public void testObjectCycle() {
886 final ObjectCycle a = new ObjectCycle();
887 final ObjectCycle b = new ObjectCycle();
888 a.obj = b;
889 b.obj = a;
890
891 final String expected = toBaseString(a) + "[" + toBaseString(b) + "[" + toBaseString(a) + "]]";
892 assertEquals(expected, a.toString());
893 }
894
895 static class ObjectCycle {
896 Object obj;
897
898 @Override
899 public String toString() {
900 return new ToStringBuilder(this).append(obj).toString();
901 }
902 }
903
904 @Test
905 public void testSimpleReflectionStatics() {
906 final SimpleReflectionStaticFieldsFixture instance1 = new SimpleReflectionStaticFieldsFixture();
907 assertEquals(
908 this.toBaseString(instance1) + "[staticString=staticString,staticInt=12345]",
909 ReflectionToStringBuilder.toString(instance1, null, false, true, SimpleReflectionStaticFieldsFixture.class));
910 assertEquals(
911 this.toBaseString(instance1) + "[staticString=staticString,staticInt=12345]",
912 ReflectionToStringBuilder.toString(instance1, null, true, true, SimpleReflectionStaticFieldsFixture.class));
913 assertEquals(
914 this.toBaseString(instance1) + "[staticString=staticString,staticInt=12345]",
915 this.toStringWithStatics(instance1, null, SimpleReflectionStaticFieldsFixture.class));
916 assertEquals(
917 this.toBaseString(instance1) + "[staticString=staticString,staticInt=12345]",
918 this.toStringWithStatics(instance1, null, SimpleReflectionStaticFieldsFixture.class));
919 }
920
921
922
923
924 @Test
925 public void testReflectionStatics() {
926 final ReflectionStaticFieldsFixture instance1 = new ReflectionStaticFieldsFixture();
927 assertEquals(
928 this.toBaseString(instance1) + "[staticString=staticString,staticInt=12345,instanceString=instanceString,instanceInt=67890]",
929 ReflectionToStringBuilder.toString(instance1, null, false, true, ReflectionStaticFieldsFixture.class));
930 assertEquals(
931 this.toBaseString(instance1) + "[staticString=staticString,staticInt=12345,staticTransientString=staticTransientString,staticTransientInt=54321,instanceString=instanceString,instanceInt=67890,transientString=transientString,transientInt=98765]",
932 ReflectionToStringBuilder.toString(instance1, null, true, true, ReflectionStaticFieldsFixture.class));
933 assertEquals(
934 this.toBaseString(instance1) + "[staticString=staticString,staticInt=12345,instanceString=instanceString,instanceInt=67890]",
935 this.toStringWithStatics(instance1, null, ReflectionStaticFieldsFixture.class));
936 assertEquals(
937 this.toBaseString(instance1) + "[staticString=staticString,staticInt=12345,instanceString=instanceString,instanceInt=67890]",
938 this.toStringWithStatics(instance1, null, ReflectionStaticFieldsFixture.class));
939 }
940
941
942
943
944 @Test
945 public void testInheritedReflectionStatics() {
946 final InheritedReflectionStaticFieldsFixture instance1 = new InheritedReflectionStaticFieldsFixture();
947 assertEquals(
948 this.toBaseString(instance1) + "[staticString2=staticString2,staticInt2=67890]",
949 ReflectionToStringBuilder.toString(instance1, null, false, true, InheritedReflectionStaticFieldsFixture.class));
950 assertEquals(
951 this.toBaseString(instance1) + "[staticString2=staticString2,staticInt2=67890,staticString=staticString,staticInt=12345]",
952 ReflectionToStringBuilder.toString(instance1, null, false, true, SimpleReflectionStaticFieldsFixture.class));
953 assertEquals(
954 this.toBaseString(instance1) + "[staticString2=staticString2,staticInt2=67890,staticString=staticString,staticInt=12345]",
955 this.toStringWithStatics(instance1, null, SimpleReflectionStaticFieldsFixture.class));
956 assertEquals(
957 this.toBaseString(instance1) + "[staticString2=staticString2,staticInt2=67890,staticString=staticString,staticInt=12345]",
958 this.toStringWithStatics(instance1, null, SimpleReflectionStaticFieldsFixture.class));
959 }
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987 public <T> String toStringWithStatics(final T object, final ToStringStyle style, final Class<? super T> reflectUpToClass) {
988 return ReflectionToStringBuilder.toString(object, style, false, true, reflectUpToClass);
989 }
990
991
992
993
994 @Test
995 public void test_setUpToClass_valid() {
996 final Integer val = Integer.valueOf(5);
997 final ReflectionToStringBuilder test = new ReflectionToStringBuilder(val);
998 test.setUpToClass(Number.class);
999 test.toString();
1000 }
1001
1002
1003
1004
1005 @Test(expected=IllegalArgumentException.class)
1006 public void test_setUpToClass_invalid() {
1007 final Integer val = Integer.valueOf(5);
1008 final ReflectionToStringBuilder test = new ReflectionToStringBuilder(val);
1009 try {
1010 test.setUpToClass(String.class);
1011 } finally {
1012 test.toString();
1013 }
1014 }
1015
1016
1017
1018
1019 class ReflectionStaticFieldsFixture {
1020 static final String staticString = "staticString";
1021 static final int staticInt = 12345;
1022 static final transient String staticTransientString = "staticTransientString";
1023 static final transient int staticTransientInt = 54321;
1024 String instanceString = "instanceString";
1025 int instanceInt = 67890;
1026 transient String transientString = "transientString";
1027 transient int transientInt = 98765;
1028 }
1029
1030
1031
1032
1033 class SimpleReflectionStaticFieldsFixture {
1034 static final String staticString = "staticString";
1035 static final int staticInt = 12345;
1036 }
1037
1038
1039
1040
1041 class InheritedReflectionStaticFieldsFixture extends SimpleReflectionStaticFieldsFixture {
1042 static final String staticString2 = "staticString2";
1043 static final int staticInt2 = 67890;
1044 }
1045
1046 @Test
1047 public void testReflectionNull() {
1048 assertEquals("<null>", ReflectionToStringBuilder.toString(null));
1049 }
1050
1051
1052
1053
1054
1055 class MultiLineTestObject {
1056 Integer i = Integer.valueOf(31337);
1057 @Override
1058 public String toString() {
1059 return new ToStringBuilder(this).append("testInt", i).toString();
1060 }
1061 }
1062
1063 @Test
1064 public void testAppendToStringUsingMultiLineStyle() {
1065 final MultiLineTestObject obj = new MultiLineTestObject();
1066 final ToStringBuilder testBuilder = new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
1067 .appendToString(obj.toString());
1068 assertEquals(testBuilder.toString().indexOf("testInt=31337"), -1);
1069 }
1070
1071 }